package com.molichuxing.services.infrastructure.dto.response;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

import com.molichuxing.framework.dto.ResponseRootDto;
import com.molichuxing.services.property.OrderPayWayEnum;
import com.molichuxing.services.property.OrderPaymentMethodEnum;
import com.molichuxing.services.property.OrderSourceEnum;
import com.molichuxing.services.property.OrderSubscribeStatusEnum;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 订阅里程订单dto
 * 
 * @author zoumingyu
 * @date 2019年8月13日
 *
 */
@Data
public class OrderSubscribeDto extends ResponseRootDto {
	private static final long serialVersionUID = -1627290979695478084L;

	/**
	 * id
	 */
    private Integer id;

    /**
     * 订单号 order_code
     */
    private Long orderCode;

    /**
     * 用户id user_id
     */
    private Integer userId;

    /**
	 * 车辆id car_id
	 */
	private Integer carId;

	/**
	 * 租金(总租金) cart_fee
	 */
    private BigDecimal cartFee;

    /**
     * 保证金 deposit
     */
    private BigDecimal deposit;

    /**
     * 下单时间 order_time
     */
    private LocalDateTime orderTime;
    
    /**
	 * 支付方式( 11：智能终端-微信， 12：智能终端-支付宝， 13：智能终端-pos机，21：微信-公众号，22：微信-H5，
	 * 23：微信-APP，34：微信-扫码，25：微信-小程序，31：支付宝-APP，32：支付宝-H5，41:
	 * 线下支付，51：银联-APP，51：银联-H5) pay_way
	 */
	private OrderPayWayEnum payWay;

    /**
     * 支付时间(首付时间) pay_time
     */
    private LocalDateTime payTime;

    /**
     * 提车截止日期(过期锁定时间) delivery_deadline
     */
    private LocalDateTime deliveryDeadline;

    /**
	 * 订单来源（1：智能终端（AIO），2：手机APP（Android），3：手机APP（IOS），4：微信小程序（APPLET），5：微信公众号（JSAPI），6：H5页面（MWEB））
	 * source
	 */
	private OrderSourceEnum source;

    /**
	 * 下单门店id place_store_id
	 */
	private Integer placeStoreId;

    /**
	 * 下单设备编号（智能终端下单为终端cpu） place_device_num
	 */
	private String placeDeviceNum;

    /**
	 * 下销售顾问id place_salesman_id
	 */
	private Integer placeSalesmanId;

    /**
	 * 起租日 lease_inception
	 */
	private LocalDate leaseInception;

    /**
	 * 截止日（起租日加租期） lease_expire
	 */
	private LocalDate leaseExpire;

    /**
     * 订单状态 order_status
     */
    private OrderSubscribeStatusEnum orderStatus;

    /**
     * 订单预警里程 warning_mileage
     */
    private Integer warningMileage;

    /**
     * 订单起始车辆里程 start_mileage
     */
    private Integer startMileage;

    /**
     * 订单结束车辆里程 end_mileage
     */
    private Integer endMileage;

    /**
     * 订单还车结算车辆里程 settle_mileage
     */
    private Integer settleMileage;

    /**
     * 父订单号 parent_order_code
     */
    private Long parentOrderCode;

    /**
     * 是否有续订单（0：无，1：有） is_have_suborder
     */
    private Boolean isHaveSuborder;

    /**
     * 是否删除(0：未删除，1：删除) is_delete
     */
    private Boolean isDelete;

    /**
     * 商品id goods_id
     */
    private Integer goodsId;

    /**
     * 商品编码 goods_code
     */
    private String goodsCode;

    /**
	 * 车型id vehicle_id
	 */
	private Integer vehicleId;

	/**
	 * 商品租车费(商品信息) rental
	 */
	private BigDecimal rental;
	
	/**
	 * 服务费率（百分比） service_fee_rate
	 */
	private BigDecimal serviceFeeRate;

	/**
	 * 付款方式（1：一次性付清） payment_method
	 */
    private OrderPaymentMethodEnum paymentMethod;

    /**
	 * 用车时长（1：1个月，n：n个月） transport_time
	 */
	private Integer transportTime;

    /**
     * 基础里程 base_mileage
     */
    private Integer baseMileage;

    /**
     * 基础里程金额 base_mileage_price
     */
    private BigDecimal baseMileagePrice;

    /**
     * 里程包id package_mileage_id
     */
    private Integer packageMileageId;

    /**
     * 里程包里程数 package_mileage
     */
    private Integer packageMileage;

    /**
     * 里程包价格 package_mileage_price
     */
    private BigDecimal packageMileagePrice;

    /**
     * 赠送里程（0：不赠送） gift_mileage
     */
    private Integer giftMileage;

    /**
	 * 合同模板ids，多个逗号分隔 contract_template_ids
	 */
	private String contractTemplateIds;
    
    public OrderSubscribeDto setPaymentMethod(Integer paymentMethod) {
    	this.paymentMethod = paymentMethod == null ? null : OrderPaymentMethodEnum.getEnum(paymentMethod);
    	return this;
    }
    
    public OrderSubscribeDto setPayWay(Integer payWay) {
		this.payWay = payWay == null ? null : OrderPayWayEnum.getEnum(payWay);
		return this;
	}
    
    public OrderSubscribeDto setSource(Integer source) {
    	this.source = source == null ? null : OrderSourceEnum.getEnum(source);
    	return this;
    }
    
    public OrderSubscribeDto setOrderStatus(Integer orderStatus) {
    	this.orderStatus = orderStatus == null ? null : OrderSubscribeStatusEnum.getEnum(orderStatus);
    	return this;
    }
}
